/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gace.dao;

import gace.basededatos.Conexion;
import gace.logica.Servicio;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Cast-Valv-HP
 */
public class ServicioDao {

    Connection conexion;

    public ServicioDao() throws SQLException{
        this.conexion =  Conexion.getConexion();
    }

    /**
     * Crea registro en la tabla servicio en la bd
     * @param s1 Objeto de tipo Servicio que representa un servicio.
     */
    public void crearServicio(Servicio s1) throws SQLException{

        String sql = "insert into servicio (nombre, precio)" +
                "values (?, ?)";

        PreparedStatement stmt = conexion.prepareStatement(sql);
        stmt.setString(1, s1.getNombre());
        stmt.setDouble(2, s1.getPrecio());

        // se ejecuta la sentencia sql definida previamente
        stmt.execute();
        stmt.close();

    }

    /**
     * Modifca registro en la tabla servicio de la bd, cambiando los atributos
     * del registro, menos el id.
     * @param s1 Objeto de tipo Servicio que representa un servicio.
     */
    public void modificarServicio(Servicio s1) throws SQLException{

        String sql = "update servicio set nombre=?, precio=?"
                + "where idservicio=?";
        PreparedStatement stmt = conexion.prepareStatement(sql);
        stmt.setString(1, s1.getNombre());
        stmt.setDouble(2, s1.getPrecio());
        stmt.setInt(3, s1.getId());

        // se ejecuta la sentencia sql definida previamente
        stmt.execute();
        stmt.close();
    }

    /**
     * Elimina un registro de la tabla servicio en la bd.
     * @param s1 Objeto de tipo Servicio que representa un servicio.
     */
    public void eliminarServicio(Servicio s1) throws SQLException{

        String sql = "delete from servicio where idservicio=?";
        PreparedStatement stmt = this.conexion.prepareStatement(sql);
        stmt.setLong(1, s1.getId());
        stmt.execute();
        stmt.close();
    }

    /**
     *
     * @return Una lista de servicios con todos sus atributos (id, nombre
     * , precio).
     */
    public ArrayList<Servicio> listarServicios(String name) throws SQLException{
        String sql = "select * from servicio where nombre like ?";
        PreparedStatement stmt = this.conexion.prepareStatement(sql);
        stmt.setString(1, name);
        ResultSet rs = stmt.executeQuery();

        ArrayList<Servicio> miLista = new ArrayList<Servicio>();

        while(rs.next()){
            Servicio s1 = new Servicio();
            s1.setId(rs.getInt("idservicio"));
            s1.setNombre(rs.getString("nombre"));
            s1.setPrecio(rs.getDouble("precio"));
            miLista.add(s1);
        }

        rs.close();
        stmt.close();

        return miLista;

    }

    public ArrayList<Servicio> listarServicios() throws SQLException{
        String sql = "select * from servicio";
        PreparedStatement stmt = this.conexion.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        ArrayList<Servicio> miLista = new ArrayList<Servicio>();

        while(rs.next()){
            Servicio s1 = new Servicio();
            s1.setId(rs.getInt("idservicio"));
            s1.setNombre(rs.getString("nombre"));
            s1.setPrecio(rs.getDouble("precio"));
            miLista.add(s1);
        }

        rs.close();
        stmt.close();

        return miLista;

    }

    public static void main(String[] args) throws SQLException{
        // Prueba1: agregar servicio
//        Servicio s = new Servicio();
//        s.setNombre("habitacion sencilla");
//        s.setPrecio(150.2);
//        ServicioDao sDao = new ServicioDao();
//        sDao.crearServicio(s);

        // Prueba2: modificar servicio
//        Servicio s = new Servicio();
//        s.setId(1);
//        s.setNombre("habitacion sencilla mod");
//        s.setPrecio(150.2);
//        ServicioDao sDao = new ServicioDao();
//        sDao.modificarServicio(s);

        // Prueba3: eliminar servicio
//        Servicio s = new Servicio();
//        s.setId(1);
//        ServicioDao sDao = new ServicioDao();
//        sDao.eliminarServicio(s);

        // Prueba4: listar servicios
//        ServicioDao sDao = new ServicioDao();
//        ArrayList<Servicio> serv =  sDao.listarServicios();
//        for (Servicio s : serv) {
//            System.out.println(s.getNombre());
//        }

        //Prueba 5: listar servicios dado el nombre
//        ServicioDao sDao = new ServicioDao();
//        ArrayList<Servicio> serv =  sDao.listarServicios("habitacion sencilla");
//        for (Servicio s : serv) {
//            System.out.println(s.getNombre());
//        }
    }
}
